﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Dlls;
using Persistencia;
using UI.Views.Consultas;

namespace UI.Views.Lancamentos.Financeiro
{
    /// <summary>
    /// Interaction logic for frmContasAReceber.xaml
    /// </summary>
    public partial class frmContasAReceber : Window
    {
        private int CodigoAlterarDeletar = 0;
        private int codigo = 0;
        private AReceber areceber;
        private AReceberParcela areceberparcela;
        private AReceberDll areceberdll;
        private AReceberParcelaDLL areceberparceladll;
        private CaixaBanco caixabanco;
        private CaixaBancoDLL caixabancodll;
        private PessoasDLL pessoaDll;

        public frmContasAReceber(int codigo)
        {
            InitializeComponent();
            areceber = new AReceber();
            areceberdll = new AReceberDll();
            areceberparcela = new AReceberParcela();
            areceberparceladll = new AReceberParcelaDLL();
            caixabanco = new CaixaBanco();
            caixabancodll = new CaixaBancoDLL();
            pessoaDll = new PessoasDLL();
         //   ReceberModoOpen();

            cbxConta.ItemsSource = caixabancodll.List().Select(o => o.NomeCaixaBanco.ToString());
            CodigoAlterarDeletar = 0;// int.Parse(txtDocumento.Text);
        }

        public void InsertOrUpdate(object sender, RoutedEventArgs e)
        {
            try
            {

                areceber.DataVenda = Convert.ToDateTime(txtDataEmissao.Text);
                areceber.DataVencimento = Convert.ToDateTime(txtDataVencimento.Text);
                areceber.DataPrevisao = Convert.ToDateTime(txtDataPrevisao.Text);
                areceber.TotalReceber = decimal.Parse(txtValor.Text);
                areceber.Quitado = false;
                areceber.Descricao = txtDescricao.Text;
                areceber.CodPessoa = int.Parse(txtCodClie.Text);
                areceber.Documento = txtDocumento.Text;
                if (txtCodClie.Text != "")
                {
                    txtNome.Text = Convert.ToString(areceberdll.getNomePorCodigo(int.Parse(txtCodClie.Text)));
                }
                areceberdll.Insert(areceber);
                MessageBox.Show("Conta Cadastrada com sucesso!");
                ReceberModoClose();
                reset(0, this);
                areceber = new AReceber();
            }
            catch (Exception)
            {
                
                MessageBox.Show("Registro não pode ser gravado, favor verificar o correto preenchimento");
            }

        }
        /// <summary>
        ///     Habilita as Opções para lançamento de contas
        ///     AReceber (Inicializado junto com Form)
        /// </summary>
        private void ReceberModoOpen()
        {
            txtDocumento.IsEnabled = true;
            txtCodClie.IsEnabled = true;
            txtNome.IsEnabled = true;
            txtDataEmissao.IsEnabled = true;
            txtValor.IsEnabled = true;
            txtDescricao.IsEnabled = true;
            
            SemBaixa();
        }
        /// <summary>
        ///     Habilita as opções de Baixa da Conta
        /// </summary>
        private void ReceberModoClose()
        {
            txtDocumento.IsEnabled = false;
            txtCodClie.IsEnabled = false;
            txtNome.IsEnabled = false;
            txtDataEmissao.IsEnabled = false;
            txtValor.IsEnabled = false;
            txtDescricao.IsEnabled = false;
            Baixa();
        }
        /// <summary>
        /// Limpa o Form
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Novo(object sender, RoutedEventArgs e)
        {
            reset(0, this);
        }

        private void SemBaixa()
        {
            cbxConta.IsEnabled          = false;
            txtDataRecebido.IsEnabled   = false;
            cbxTipoBaixa.IsEnabled      = false;
            txtValorParcela.IsEnabled   = false;
            btnBaixar.IsEnabled         = true;
            txtDataVencimento.IsEnabled = false;
            txtDataPrevisao.IsEnabled   = false;
            bntConfirmarBaixa.IsEnabled = false;
        }
        private void Baixa()
        {
            cbxConta.IsEnabled          = true;
            txtDataRecebido.IsEnabled   = true;
            cbxTipoBaixa.IsEnabled      = true;
            txtValorParcela.IsEnabled   = true;
            txtDataVencimento.IsEnabled = true;
            txtDataPrevisao.IsEnabled   = true;
          //  btnBaixar.IsEnabled         = true;
           // bntCancelarBaixa.IsEnabled  = true;
        }

      


        private static void reset(int depth, DependencyObject obj)
        {
            // Percorre todos os filhos do objeto visual.
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
                reset(depth + 1, VisualTreeHelper.GetChild(obj, i));

            // Se for um TextBox, limpa.
            if (obj is TextBox)
                ((TextBox)obj).Text = string.Empty;
            if (obj is DatePicker)
                ((DatePicker)obj).Text = string.Empty;
            if (obj is ComboBox)
                ((ComboBox)obj).Text = string.Empty;
        }

        public void Delete(object sender, RoutedEventArgs e)
        {

        }

        private void BuscarCliente(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                if (txtCodClie.Text.Equals(""))
                {
                    global.ReturnPessoa = null;
                    new frmConsultaPadrao("Pessoa").ShowDialog();
                    if (global.ReturnPessoa != null)
                    {
                        txtCodClie.Text = global.ReturnPessoa.Codigo.ToString();
                        txtNome.Text = global.ReturnPessoa.Nome;

                    }
                }
                else
                {
                    int codigo;
                    codigo = int.Parse(txtCodClie.Text);

                    Pessoa pessoa = pessoaDll.getPessoa(codigo);
                    if (pessoa != null)
                    {
                        txtCodClie.Text = Convert.ToString(pessoa.Codigo);
                        txtNome.Text = Convert.ToString(pessoa.Nome);
                    }
                    else
                    {
                        MessageBox.Show("Registro não encontrado, favor verificar");
                    }
                }
            }
        }

        private void BuscaEditaDocumento(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                if (txtDocumento.Text.ToString() == "")
                {
                    frmConsultaPadrao consultaPadrao = new frmConsultaPadrao("AReceber");
                    consultaPadrao.Owner = this;
                    consultaPadrao.Show();
                }
                else if (codigo.ToString() != "")
                {
                    AReceber areceber = areceberdll.getReceber(int.Parse(txtDocumento.Text));
                    if (areceber!= null)
                    {
                        txtDocumento.Text = Convert.ToString(areceber.Documento);
                        txtCodClie.Text = Convert.ToString(areceber.CodPessoa);
                        txtNome.Text = areceberdll.getNomePorCodigo(int.Parse(txtCodClie.Text));
                        txtDescricao.Text = areceber.Descricao;
                        txtDataEmissao.Text = Convert.ToString(areceber.DataVenda);
                        txtDataVencimento.Text = Convert.ToString(areceber.DataVencimento);
                        txtDataPrevisao.Text = Convert.ToString(areceber.DataPrevisao);
                        txtValor.Text = Convert.ToString(areceber.TotalReceber);

                        //if (areceberparcela != null)
                        //{
                        //    int codcaixa = int.Parse(global.ReturnAreceberParcela.CodCaixaBanco.ToString());
                        //    txtParcela.Text = areceberparcela.Parcela;
                        //    //cbxConta.SelectedItem.ToString() = areceberparceladll.getNomeCaixa(codcaixa);
                        //    txtDataRecebido.Text = areceberparcela.DataRecebimento.ToString();
                        //    txtValor.Text = areceberparcela.ValorRecebido.ToString();
                        //}
                    }
                    
                }
                else
                {
                    MessageBox.Show("Documento não encontrado , verifique o numero digitado ou pressione +" + "ENTER" + " com o campo DOCUMENTO vazio para listar todos");
                }


            }
        }

        private void BaixarDocumento(object sender, RoutedEventArgs e)
        {
            if (txtDocumento.Text !="")
            {
                ReceberModoClose();
                bntConfirmarBaixa.IsEnabled = true;
            }
            else
            {
                MessageBox.Show("Não há documentos a serem baixados favor conferir");
            }
        }
    }

}
